package main

import (

	"compress/gzip"
	"encoding/json"
	"fmt"
	"os"
	"time"
)

// 示例数据结构
type PayloadData struct {
	P string `json:"P"`
	D string `json:"D"`
}

type DeviceData struct {
	StationName string       `json:"StationName"`
	StationCode string       `json:"StationCode"`
	RoomName    string       `json:"RoomName"`
	RoomCode    string       `json:"RoomCode"`
	DeviceName  string       `json:"DeviceName"`
	DeviceCode  string       `json:"DeviceCode"`
	UpdateTime  time.Time    `json:"UpdateTime"`
	Payload     []PayloadData `json:"Payload"`
}

// 将JSON数据压缩为Gzip格式并保存为二进制文件
func createGzipBinaryFile(data DeviceData, outputFile string) error {
	// 将数据编码为JSON格式
	jsonData, err := json.Marshal(data)
	if err != nil {
		return fmt.Errorf("无法将数据编码为 JSON: %v", err)
	}

	// 创建二进制文件
	file, err := os.Create(outputFile)
	if err != nil {
		return fmt.Errorf("无法创建二进制文件: %v", err)
	}
	defer file.Close()

	// 创建Gzip压缩器
	gzipWriter := gzip.NewWriter(file)
	defer gzipWriter.Close()

	// 写入JSON数据到Gzip文件
	if _, err := gzipWriter.Write(jsonData); err != nil {
		return fmt.Errorf("写入 Gzip 压缩文件错误: %v", err)
	}

	fmt.Println("数据成功写入 Gzip 二进制文件")
	return nil
}

func main() {
	// 示例数据
	data := DeviceData{
		StationName: "大兴区亦庄瀛海数据中心",
		StationCode: "PN2022080001",
		RoomName:    "219机房",
		RoomCode:    "219JF",
		DeviceName:  "219-A列1号空调",
		DeviceCode:  "yhywk336",
		UpdateTime:  time.Now(),
		Payload: []PayloadData{
			{P: "400256", D: "25.1"},
			{P: "400257", D: "24.5"},
			// ...添加其他 Payload 数据
		},
	}

	// 生成 Gzip 二进制文件
	outputFile := "data.bin.gz"
	if err := createGzipBinaryFile(data, outputFile); err != nil {
		fmt.Println("生成二进制文件失败:", err)
		return
	}
}
